// 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。
// 请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列。
// 注意：最终，合并后数组不应由函数返回，而是存储在数组 nums1 中。为了应对这种情况，nums1 的初始长度为 m + n，其中前 m 个元素表示应合并的元素，后 n 个元素为 0 ，应忽略。nums2 的长度为 n 。
var merge = function (nums1, m, nums2, n) {
  if (m == 0) {
    for (let i = 0; i < n; i++) {
      nums1[i] = nums2[i];
    }
  } else {
    // 平移数组
    for (let i = m - 1; i >= 0; i--) {
      nums1[i + n] = nums1[i];
    }
    let i = n, j = 0, currentIndex = 0;
    while (i < (m + n) && j < n) {
      // 选取最小的数放进nums1
      if (nums1[i] <= nums2[j]) {
        nums1[currentIndex++] = nums1[i++];
      } else {
        nums1[currentIndex++] = nums2[j++];
      }
    }
    // nums1没遍历完不用管
    // nums2没遍历完
    while (j < n) {
      nums1[currentIndex++] = nums2[j++]
    }
    return nums1;
  }

};
// console.log(merge([1, 2, 3, 0, 0, 0], 3, [2, 5, 6], 3));
// console.log(merge([1], 1, [], 0));
// console.log(merge([0], 0, [1], 1));
console.log(merge([4, 0, 0, 0, 0, 0], 1, [1, 2, 3, 5, 6], 5));